{
 "cells": [
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# Regressão Linear Multivariada - Trabalho\n",
    "\n",
    "## Estudo de caso: Qualidade de Vinhos\n",
    "\n",
    "Nesta trabalho, treinaremos um modelo de regressão linear usando descendência de gradiente estocástico no conjunto de dados da Qualidade do Vinho. O exemplo pressupõe que uma cópia CSV do conjunto de dados está no diretório de trabalho atual com o nome do arquivo *winequality-white.csv*.\n",
    "\n",
    "O conjunto de dados de qualidade do vinho envolve a previsão da qualidade dos vinhos brancos em uma escala, com medidas químicas de cada vinho. É um problema de classificação multiclasse, mas também pode ser enquadrado como um problema de regressão. O número de observações para cada classe não é equilibrado. Existem 4.898 observações com 11 variáveis de entrada e 1 variável de saída. Os nomes das variáveis são os seguintes:\n",
    "\n",
    "1. Fixed acidity.\n",
    "2. Volatile acidity.\n",
    "3. Citric acid.\n",
    "4. Residual sugar.\n",
    "5. Chlorides.\n",
    "6. Free sulfur dioxide. \n",
    "7. Total sulfur dioxide. \n",
    "8. Density.\n",
    "9. pH.\n",
    "10. Sulphates.\n",
    "11. Alcohol.\n",
    "12. Quality (score between 0 and 10).\n",
    "\n",
    "O desempenho de referencia de predição do valor médio é um RMSE de aproximadamente 0.148 pontos de qualidade.\n",
    "\n",
    "Utilize o exemplo apresentado no tutorial e altere-o de forma a carregar os dados e analisar a acurácia de sua solução. \n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 46,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "import pandas as pd\n",
    "import numpy as np\n",
    "import matplotlib.pyplot as plt\n",
    "from sklearn.preprocessing import MinMaxScaler\n",
    "\n",
    "def predict(row, coefficients):\n",
    "  yhat = coefficients[0]\n",
    "  for i in range(len(row)-1):\n",
    "    yhat += coefficients[i + 1] * row[i]\n",
    "  return yhat"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 47,
   "metadata": {},
   "outputs": [],
   "source": [
    "def coefficients_sgd(train, l_rate, n_epoch):\n",
    "    coef = [0.0 for i in range(len(train[0]))]\n",
    "    err = np.array([])\n",
    "    print ('Coeficiente Inicial={0}' % (coef))\n",
    "    for epoch in range(n_epoch):\n",
    "        sum_error = 0\n",
    "        for row in train:\n",
    "            yhat = predict(row, coef)\n",
    "            error = yhat - row[-1]\n",
    "            sum_error += error**2\n",
    "            coef[0] = coef[0] - l_rate * error\n",
    "            for i in range(len(row)-1):\n",
    "                coef[i + 1] = coef[i + 1] - l_rate * error * row[i] \n",
    "        print(('epoch=%d, lrate=%.3f, error=%.3f' % (epoch, l_rate, sum_error)))\n",
    "        err = np.append(err, sum_error)\n",
    "        #print(err)\n",
    "    return [coef,err]\n"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## utilizando o dataset do tutorial e mudando rate e épocas"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 48,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Coeficiente Inicial={0}\n",
      "epoch=0, lrate=0.010, error=33.621\n",
      "epoch=1, lrate=0.010, error=10.912\n",
      "epoch=2, lrate=0.010, error=4.855\n",
      "epoch=3, lrate=0.010, error=3.255\n",
      "epoch=4, lrate=0.010, error=2.841\n",
      "epoch=5, lrate=0.010, error=2.738\n",
      "epoch=6, lrate=0.010, error=2.715\n",
      "epoch=7, lrate=0.010, error=2.711\n",
      "epoch=8, lrate=0.010, error=2.711\n",
      "epoch=9, lrate=0.010, error=2.712\n",
      "epoch=10, lrate=0.010, error=2.712\n",
      "epoch=11, lrate=0.010, error=2.712\n",
      "epoch=12, lrate=0.010, error=2.712\n",
      "epoch=13, lrate=0.010, error=2.712\n",
      "epoch=14, lrate=0.010, error=2.712\n",
      "epoch=15, lrate=0.010, error=2.712\n",
      "epoch=16, lrate=0.010, error=2.712\n",
      "epoch=17, lrate=0.010, error=2.712\n",
      "epoch=18, lrate=0.010, error=2.712\n",
      "epoch=19, lrate=0.010, error=2.712\n",
      "epoch=20, lrate=0.010, error=2.712\n",
      "epoch=21, lrate=0.010, error=2.711\n",
      "epoch=22, lrate=0.010, error=2.711\n",
      "epoch=23, lrate=0.010, error=2.711\n",
      "epoch=24, lrate=0.010, error=2.711\n",
      "epoch=25, lrate=0.010, error=2.711\n",
      "epoch=26, lrate=0.010, error=2.711\n",
      "epoch=27, lrate=0.010, error=2.711\n",
      "epoch=28, lrate=0.010, error=2.711\n",
      "epoch=29, lrate=0.010, error=2.711\n",
      "epoch=30, lrate=0.010, error=2.710\n",
      "epoch=31, lrate=0.010, error=2.710\n",
      "epoch=32, lrate=0.010, error=2.710\n",
      "epoch=33, lrate=0.010, error=2.710\n",
      "epoch=34, lrate=0.010, error=2.710\n",
      "epoch=35, lrate=0.010, error=2.710\n",
      "epoch=36, lrate=0.010, error=2.710\n",
      "epoch=37, lrate=0.010, error=2.710\n",
      "epoch=38, lrate=0.010, error=2.710\n",
      "epoch=39, lrate=0.010, error=2.710\n",
      "epoch=40, lrate=0.010, error=2.709\n",
      "epoch=41, lrate=0.010, error=2.709\n",
      "epoch=42, lrate=0.010, error=2.709\n",
      "epoch=43, lrate=0.010, error=2.709\n",
      "epoch=44, lrate=0.010, error=2.709\n",
      "epoch=45, lrate=0.010, error=2.709\n",
      "epoch=46, lrate=0.010, error=2.709\n",
      "epoch=47, lrate=0.010, error=2.709\n",
      "epoch=48, lrate=0.010, error=2.709\n",
      "epoch=49, lrate=0.010, error=2.709\n",
      "epoch=50, lrate=0.010, error=2.709\n",
      "epoch=51, lrate=0.010, error=2.709\n",
      "epoch=52, lrate=0.010, error=2.709\n",
      "epoch=53, lrate=0.010, error=2.708\n",
      "epoch=54, lrate=0.010, error=2.708\n",
      "epoch=55, lrate=0.010, error=2.708\n",
      "epoch=56, lrate=0.010, error=2.708\n",
      "epoch=57, lrate=0.010, error=2.708\n",
      "epoch=58, lrate=0.010, error=2.708\n",
      "epoch=59, lrate=0.010, error=2.708\n",
      "epoch=60, lrate=0.010, error=2.708\n",
      "epoch=61, lrate=0.010, error=2.708\n",
      "epoch=62, lrate=0.010, error=2.708\n",
      "epoch=63, lrate=0.010, error=2.708\n",
      "epoch=64, lrate=0.010, error=2.708\n",
      "epoch=65, lrate=0.010, error=2.708\n",
      "epoch=66, lrate=0.010, error=2.708\n",
      "epoch=67, lrate=0.010, error=2.708\n",
      "epoch=68, lrate=0.010, error=2.708\n",
      "epoch=69, lrate=0.010, error=2.708\n",
      "epoch=70, lrate=0.010, error=2.707\n",
      "epoch=71, lrate=0.010, error=2.707\n",
      "epoch=72, lrate=0.010, error=2.707\n",
      "epoch=73, lrate=0.010, error=2.707\n",
      "epoch=74, lrate=0.010, error=2.707\n",
      "epoch=75, lrate=0.010, error=2.707\n",
      "epoch=76, lrate=0.010, error=2.707\n",
      "epoch=77, lrate=0.010, error=2.707\n",
      "epoch=78, lrate=0.010, error=2.707\n",
      "epoch=79, lrate=0.010, error=2.707\n",
      "epoch=80, lrate=0.010, error=2.707\n",
      "epoch=81, lrate=0.010, error=2.707\n",
      "epoch=82, lrate=0.010, error=2.707\n",
      "epoch=83, lrate=0.010, error=2.707\n",
      "epoch=84, lrate=0.010, error=2.707\n",
      "epoch=85, lrate=0.010, error=2.707\n",
      "epoch=86, lrate=0.010, error=2.707\n",
      "epoch=87, lrate=0.010, error=2.707\n",
      "epoch=88, lrate=0.010, error=2.707\n",
      "epoch=89, lrate=0.010, error=2.707\n",
      "epoch=90, lrate=0.010, error=2.707\n",
      "epoch=91, lrate=0.010, error=2.707\n",
      "epoch=92, lrate=0.010, error=2.707\n",
      "epoch=93, lrate=0.010, error=2.706\n",
      "epoch=94, lrate=0.010, error=2.706\n",
      "epoch=95, lrate=0.010, error=2.706\n",
      "epoch=96, lrate=0.010, error=2.706\n",
      "epoch=97, lrate=0.010, error=2.706\n",
      "epoch=98, lrate=0.010, error=2.706\n",
      "epoch=99, lrate=0.010, error=2.706\n",
      "coeficientes finais: [0.3032152473195083, 0.8383332690056606]\n"
     ]
    }
   ],
   "source": [
    "dataset = [[1, 1], [2, 3], [4, 3], [3, 2], [5, 5]]\n",
    "l_rate = 0.01\n",
    "n_epoch = 100\n",
    "coef = coefficients_sgd(dataset, l_rate, n_epoch)\n",
    "print(\"coeficientes finais: {:s}\".format(coef[0]))"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## dataset do trabalho (wine)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 49,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "dataset = pd.read_csv(\"winequality-white.csv\", delimiter=\";\")"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 50,
   "metadata": {},
   "outputs": [],
   "source": [
    "#normalizando os dados\n",
    "dataset = MinMaxScaler().fit_transform(dataset.values[:,:-1])"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 51,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Coeficiente Inicial={0}\n",
      "epoch=0, lrate=0.010, error=152.603\n",
      "epoch=1, lrate=0.010, error=112.296\n",
      "epoch=2, lrate=0.010, error=98.784\n",
      "epoch=3, lrate=0.010, error=91.969\n",
      "epoch=4, lrate=0.010, error=87.507\n",
      "epoch=5, lrate=0.010, error=84.078\n",
      "epoch=6, lrate=0.010, error=81.209\n",
      "epoch=7, lrate=0.010, error=78.695\n",
      "epoch=8, lrate=0.010, error=76.433\n",
      "epoch=9, lrate=0.010, error=74.358\n",
      "epoch=10, lrate=0.010, error=72.432\n",
      "epoch=11, lrate=0.010, error=70.625\n",
      "epoch=12, lrate=0.010, error=68.918\n",
      "epoch=13, lrate=0.010, error=67.298\n",
      "epoch=14, lrate=0.010, error=65.753\n",
      "epoch=15, lrate=0.010, error=64.275\n",
      "epoch=16, lrate=0.010, error=62.858\n",
      "epoch=17, lrate=0.010, error=61.497\n",
      "epoch=18, lrate=0.010, error=60.189\n",
      "epoch=19, lrate=0.010, error=58.931\n",
      "epoch=20, lrate=0.010, error=57.718\n",
      "epoch=21, lrate=0.010, error=56.550\n",
      "epoch=22, lrate=0.010, error=55.424\n",
      "epoch=23, lrate=0.010, error=54.338\n",
      "epoch=24, lrate=0.010, error=53.291\n",
      "epoch=25, lrate=0.010, error=52.280\n",
      "epoch=26, lrate=0.010, error=51.305\n",
      "epoch=27, lrate=0.010, error=50.364\n",
      "epoch=28, lrate=0.010, error=49.455\n",
      "epoch=29, lrate=0.010, error=48.578\n",
      "epoch=30, lrate=0.010, error=47.732\n",
      "epoch=31, lrate=0.010, error=46.915\n",
      "epoch=32, lrate=0.010, error=46.126\n",
      "epoch=33, lrate=0.010, error=45.365\n",
      "epoch=34, lrate=0.010, error=44.630\n",
      "epoch=35, lrate=0.010, error=43.920\n",
      "epoch=36, lrate=0.010, error=43.235\n",
      "epoch=37, lrate=0.010, error=42.573\n",
      "epoch=38, lrate=0.010, error=41.934\n",
      "epoch=39, lrate=0.010, error=41.317\n",
      "epoch=40, lrate=0.010, error=40.722\n",
      "epoch=41, lrate=0.010, error=40.146\n",
      "epoch=42, lrate=0.010, error=39.591\n",
      "epoch=43, lrate=0.010, error=39.055\n",
      "epoch=44, lrate=0.010, error=38.537\n",
      "epoch=45, lrate=0.010, error=38.037\n",
      "epoch=46, lrate=0.010, error=37.554\n",
      "epoch=47, lrate=0.010, error=37.088\n",
      "epoch=48, lrate=0.010, error=36.638\n",
      "epoch=49, lrate=0.010, error=36.203\n",
      "epoch=50, lrate=0.010, error=35.783\n",
      "epoch=51, lrate=0.010, error=35.378\n",
      "epoch=52, lrate=0.010, error=34.987\n",
      "epoch=53, lrate=0.010, error=34.609\n",
      "epoch=54, lrate=0.010, error=34.244\n",
      "epoch=55, lrate=0.010, error=33.891\n",
      "epoch=56, lrate=0.010, error=33.551\n",
      "epoch=57, lrate=0.010, error=33.222\n",
      "epoch=58, lrate=0.010, error=32.905\n",
      "epoch=59, lrate=0.010, error=32.599\n",
      "epoch=60, lrate=0.010, error=32.303\n",
      "epoch=61, lrate=0.010, error=32.017\n",
      "epoch=62, lrate=0.010, error=31.741\n",
      "epoch=63, lrate=0.010, error=31.475\n",
      "epoch=64, lrate=0.010, error=31.217\n",
      "epoch=65, lrate=0.010, error=30.969\n",
      "epoch=66, lrate=0.010, error=30.729\n",
      "epoch=67, lrate=0.010, error=30.498\n",
      "epoch=68, lrate=0.010, error=30.274\n",
      "epoch=69, lrate=0.010, error=30.058\n",
      "epoch=70, lrate=0.010, error=29.849\n",
      "epoch=71, lrate=0.010, error=29.648\n",
      "epoch=72, lrate=0.010, error=29.453\n",
      "epoch=73, lrate=0.010, error=29.266\n",
      "epoch=74, lrate=0.010, error=29.084\n",
      "epoch=75, lrate=0.010, error=28.909\n",
      "epoch=76, lrate=0.010, error=28.740\n",
      "epoch=77, lrate=0.010, error=28.577\n",
      "epoch=78, lrate=0.010, error=28.419\n",
      "epoch=79, lrate=0.010, error=28.267\n",
      "epoch=80, lrate=0.010, error=28.120\n",
      "epoch=81, lrate=0.010, error=27.978\n",
      "epoch=82, lrate=0.010, error=27.841\n",
      "epoch=83, lrate=0.010, error=27.709\n",
      "epoch=84, lrate=0.010, error=27.581\n",
      "epoch=85, lrate=0.010, error=27.457\n",
      "epoch=86, lrate=0.010, error=27.338\n",
      "epoch=87, lrate=0.010, error=27.223\n",
      "epoch=88, lrate=0.010, error=27.112\n",
      "epoch=89, lrate=0.010, error=27.005\n",
      "epoch=90, lrate=0.010, error=26.901\n",
      "epoch=91, lrate=0.010, error=26.801\n",
      "epoch=92, lrate=0.010, error=26.705\n",
      "epoch=93, lrate=0.010, error=26.611\n",
      "epoch=94, lrate=0.010, error=26.521\n",
      "epoch=95, lrate=0.010, error=26.434\n",
      "epoch=96, lrate=0.010, error=26.350\n",
      "epoch=97, lrate=0.010, error=26.269\n",
      "epoch=98, lrate=0.010, error=26.191\n",
      "epoch=99, lrate=0.010, error=26.115\n",
      "[0.4573555184107525, 0.70696960045897816, 0.1807406414046526, 0.10135068224079719, 1.9906366823434725, -0.1484821670794203, -0.079682346862481795, -0.056115408551019375, -4.9215557016861364, 0.37402449513450414, 0.12188321113532354]\n"
     ]
    }
   ],
   "source": [
    "#coeficientes finais\n",
    "[coef,err] = coefficients_sgd(dataset, l_rate, n_epoch)\n",
    "print(coef)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 52,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "[ 152.60307094  112.29598227   98.78391803   91.96920704   87.50716255\n",
      "   84.07809435   81.20870395   78.69521151   76.43253316   74.35822889\n",
      "   72.43167366   70.62500627   68.91849983   67.29786382   65.75253563\n",
      "   64.27454832   62.85776201   61.49733527   60.18935865   58.93059896\n",
      "   57.71831978   56.55015482   55.42401791   54.33803867   53.29051611\n",
      "   52.27988491   51.30469067   50.36357159   49.45524462   48.57849504\n",
      "   47.73216837   46.91516399   46.12643012   45.36495975   44.62978724\n",
      "   43.91998549   43.23466358   42.57296461   41.93406395   41.31716754\n",
      "   40.72151047   40.14635563   39.5909925    39.05473598   38.5369254\n",
      "   38.0369235    37.5541155    37.08790824   36.63772937   36.20302656\n",
      "   35.78326672   35.37793534   34.9865358    34.60858871   34.24363128\n",
      "   33.89121676   33.55091384   33.22230612   32.90499156   32.59858201\n",
      "   32.3027027    32.01699176   31.7410998    31.47468946   31.21743499\n",
      "   30.96902183   30.72914627   30.49751503   30.2738449    30.05786244\n",
      "   29.84930358   29.64791333   29.45344546   29.26566221   29.08433399\n",
      "   28.90923907   28.74016337   28.57690014   28.41924974   28.26701937\n",
      "   28.12002289   27.9780805    27.84101862   27.7086696    27.58087156\n",
      "   27.45746817   27.33830848   27.22324671   27.1121421    27.0048587\n",
      "   26.90126525   26.80123499   26.7046455    26.61137859   26.5213201\n",
      "   26.4343598    26.35039126   26.26931167   26.19102179   26.11542575]\n"
     ]
    }
   ],
   "source": [
    "#erro em cada época\n",
    "print (err)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 55,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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\nIiKS1P8Hr7sZi/JFbDEAAAAASUVORK5CYII=\n",
      "text/plain": [
       "<matplotlib.figure.Figure at 0x1a173313d0>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "#plot dos erros x épocas\n",
    "plt.plot(err)\n",
    "plt.ylabel(\"error\")\n",
    "plt.xlabel(\"epochs\")\n",
    "plt.show()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": []
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python 2",
   "language": "python",
   "name": "python2"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 2
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython2",
   "version": "2.7.13"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 2
}
